# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.NetworkServices.V1.Model.GrpcRouteRouteAction do
  @moduledoc """
  Specifies how to route matched traffic.

  ## Attributes

  *   `destinations` (*type:* `list(GoogleApi.NetworkServices.V1.Model.GrpcRouteDestination.t)`, *default:* `nil`) - Optional. The destination services to which traffic should be forwarded. If multiple destinations are specified, traffic will be split between Backend Service(s) according to the weight field of these destinations.
  *   `faultInjectionPolicy` (*type:* `GoogleApi.NetworkServices.V1.Model.GrpcRouteFaultInjectionPolicy.t`, *default:* `nil`) - Optional. The specification for fault injection introduced into traffic to test the resiliency of clients to destination service failure. As part of fault injection, when clients send requests to a destination, delays can be introduced on a percentage of requests before sending those requests to the destination service. Similarly requests from clients can be aborted by for a percentage of requests. timeout and retry_policy will be ignored by clients that are configured with a fault_injection_policy
  *   `idleTimeout` (*type:* `String.t`, *default:* `nil`) - Optional. Specifies the idle timeout for the selected route. The idle timeout is defined as the period in which there are no bytes sent or received on either the upstream or downstream connection. If not set, the default idle timeout is 1 hour. If set to 0s, the timeout will be disabled.
  *   `retryPolicy` (*type:* `GoogleApi.NetworkServices.V1.Model.GrpcRouteRetryPolicy.t`, *default:* `nil`) - Optional. Specifies the retry policy associated with this route.
  *   `statefulSessionAffinity` (*type:* `GoogleApi.NetworkServices.V1.Model.GrpcRouteStatefulSessionAffinityPolicy.t`, *default:* `nil`) - Optional. Specifies cookie-based stateful session affinity.
  *   `timeout` (*type:* `String.t`, *default:* `nil`) - Optional. Specifies the timeout for selected route. Timeout is computed from the time the request has been fully processed (i.e. end of stream) up until the response has been completely processed. Timeout includes all retries.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :destinations =>
            list(GoogleApi.NetworkServices.V1.Model.GrpcRouteDestination.t()) | nil,
          :faultInjectionPolicy =>
            GoogleApi.NetworkServices.V1.Model.GrpcRouteFaultInjectionPolicy.t() | nil,
          :idleTimeout => String.t() | nil,
          :retryPolicy => GoogleApi.NetworkServices.V1.Model.GrpcRouteRetryPolicy.t() | nil,
          :statefulSessionAffinity =>
            GoogleApi.NetworkServices.V1.Model.GrpcRouteStatefulSessionAffinityPolicy.t() | nil,
          :timeout => String.t() | nil
        }

  field(:destinations, as: GoogleApi.NetworkServices.V1.Model.GrpcRouteDestination, type: :list)

  field(:faultInjectionPolicy,
    as: GoogleApi.NetworkServices.V1.Model.GrpcRouteFaultInjectionPolicy
  )

  field(:idleTimeout)
  field(:retryPolicy, as: GoogleApi.NetworkServices.V1.Model.GrpcRouteRetryPolicy)

  field(:statefulSessionAffinity,
    as: GoogleApi.NetworkServices.V1.Model.GrpcRouteStatefulSessionAffinityPolicy
  )

  field(:timeout)
end

defimpl Poison.Decoder, for: GoogleApi.NetworkServices.V1.Model.GrpcRouteRouteAction do
  def decode(value, options) do
    GoogleApi.NetworkServices.V1.Model.GrpcRouteRouteAction.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.NetworkServices.V1.Model.GrpcRouteRouteAction do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
